package handler

import (
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"strconv"
	"strings"
	"zk333/api/respons"
	"zk333/globals"
	"zk333/models/database"
)

func PostAdd(c *gin.Context) { // 发布帖子
	// 验证内容字符长度
	content := c.PostForm("content")
	if len(content) > 300 {
		respons.Error(c, -1, "内容超出300字符限制")
		return
	}
	// 验证文件数量
	files := c.PostForm("files")
	file := strings.Split(files, "|")
	if len(file) > 9 {
		respons.Error(c, -1, "文件数量超出9个文件限制")
		return
	}
	// 验证其它参数
	userId := c.DefaultPostForm("user_id", "0")
	IntUserId, _ := strconv.Atoi(userId)
	if IntUserId == 0 {
		respons.Error(c, 401, "请登录后发布")
		return
	}
	// 全部验证通过，开始保存贴子至数据库
	post := database.Post{
		Model:   gorm.Model{},
		UserId:  int64(IntUserId),
		Content: content,
		File:    files,
		Status:  1, // 初始化贴子状态为 1
	}
	err := globals.DB.Create(&post).Error
	if err != nil {
		respons.Error(c, 500, "贴子发布失败，服务器内部错误")
		return
	}
	data := map[string]interface{}{
		"post_id": post.ID,
	}
	respons.Success(c, data)
}

func PostList(c *gin.Context) { // 帖子列表
	//默认展示审核通过的贴子
	userId := c.DefaultPostForm("user_id", "0")
	intUserId, _ := strconv.Atoi(userId)
	if intUserId == 0 {
		respons.Error(c, 401, "请登录后查看")
		return
	}
	var posts []database.Post
	// 2-审核通过
	err := globals.DB.Where("user_id = ? and status = 2", userId).Find(&posts).Error
	if err != nil {
		respons.Error(c, 500, "贴子列表查询失败，服务器内部错误")
		return
	}
	data := map[string]interface{}{
		"post_list": posts,
	}
	respons.Success(c, data)
}

func PostLike(c *gin.Context) {
	// 参数验证
	userId := c.DefaultPostForm("user_id", "0")
	intUserId, _ := strconv.Atoi(userId)
	if intUserId == 0 {
		respons.Error(c, 401, "请登录后点赞")
		return
	}
	postId := c.DefaultPostForm("post_id", "0")
	intPostId, _ := strconv.Atoi(postId)
	if intPostId == 0 {
		respons.Error(c, -1, "不存在的帖子")
		return
	}
	// 查询此用户是否已经点过赞
	var like database.Like
	globals.DB.Where("user_id = ? and post_id = ?", userId, postId).First(&like)
	if like.ID != 0 {
		respons.Error(c, -1, "不可对同一贴子重复点赞")
		return
	}
	// 没有点赞
	like = database.Like{
		Model:  gorm.Model{},
		UserId: int64(intUserId),
		PostId: int64(intPostId),
	}
	err := globals.DB.Create(&like).Error
	if err != nil {
		respons.Error(c, 500, "点赞失败，服务器内部错误")
		return
	}
	respons.Success(c, nil)
}

func PostCommentList(c *gin.Context) {
	postId := c.DefaultPostForm("post_id", "0")
	intPostId, _ := strconv.Atoi(postId)
	if intPostId == 0 {
		respons.Error(c, -1, "不存在的帖子")
		return
	}
	var commentList []database.Comment
	err := globals.DB.Where("post_id = ?", postId).Find(&commentList).Error
	if err != nil {
		respons.Error(c, 500, "查询评论列表失败，服务器内部错误")
		return
	}
	data := map[string]interface{}{
		"comment_list": commentList,
	}
	respons.Success(c, data)
}
